#include "zqfunction.h"

namespace zgq{

void ZQFunction::delayMs(int ms)
{
    QEventLoop loop;
    QTimer::singleShot(ms, &loop, SLOT(quit()));
    loop.exec();
}

void ZQFunction::startTimerMs()
{
    m_Time.start();
}

double ZQFunction::endTimerMs()
{
    return m_Time.elapsed();
}

void ZQFunction::startClockMs()
{
    m_StartTime = double(clock());
}

double ZQFunction::endClockMs()
{
    return double(clock())-m_StartTime;
}



#ifdef Q_CC_GNU
void ZQFunction::startTimerUs()
{
    gettimeofday(&m_Start,nullptr);
}
double ZQFunction::endTimerUs()
{
    gettimeofday(&m_End,nullptr);
    m_Use=(1000000*(m_End.tv_sec-m_Start.tv_sec) + m_End.tv_usec-m_Start.tv_usec)/1.0;
    return m_Use;
}


#elif Q_CC_MSVC
void ZQFunction::startTimerUs()
{
    //获得CPU计时器的时钟频率
    QueryPerformanceFrequency(&litmp);//取得高精度运行计数器的频率f,单位是每秒多少次（n/s），
    dfFreq = (double)litmp.QuadPart;

    QueryPerformanceCounter(&litmp);//取得高精度运行计数器的数值
    Qpart1 = litmp.QuadPart; //开始计时
}
double ZQFunction::endTimerUs()
{
    QueryPerformanceCounter(&litmp);//取得高精度运行计数器的数值
    Qpart2 = litmp.QuadPart; //终止计时

    dfMinus = (double)(Qpart2 - Qpart1);//计算计数器值
    dfTime = dfMinus / dfFreq;//获得对应时间，单位为秒,可以乘1000000精确到微秒级（us）
    return dfTime*1000000;

}
#endif


}


